<?php

function conn()
{
	//数据库操作
	$link = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or exit('数据库连接失败');
	mysqli_set_charset($link, DB_CHARSET);
	return $link;
}
/*
*功能：上传文件
*参数：
*@param string $fname; 上传表单项名称
*@param string $path; 上传文件存放目录
*@param array $allowType; 上传允许的类型
*@param int $allowSize; 上传允许大小 单位字节
*返回值：
*@return string $newname; 上传文件名称
*/

function upload($fname, $path = './uploads', $allowType = array('image/jpeg', 'image/png', 'image/gif'), $allowSize = 1048576)
{
	$file = $_FILES[$fname];
	//根据需求判断
	//1.上传文件错误号 0成功 失败  4
	if($file['error'] > 0){
		switch($file['error']){
			case 1:
				echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
				break;
			case 2:
				echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
				break;
			case 3:
				echo '文件只有部分被上传';
				break;
			case 4:
				echo '没有文件被上传';
				break;
			case 6:
				echo '找不到临时文件夹';
				break;
			case 7:
				echo '文件写入失败';
				break;
		}
		exit;
	}

	//2.上传文件类型限制
	//定义允许的上传文件类型
	
	//判断上传文件类型 是否 是允许的文件类型
	if(!in_array($file['type'], $allowType)){
		exit('上传类型不符合，请上传jpg|png|gif');
	}

	//3.上传文件大小限制 单位 字节
	
	if($file['size'] > $allowSize){
		exit('上传大小不符合，请上传1M以内的图像');
	}

	//4.随机上传文件名 time rand 文件名 +  后缀名(扩展名)

	//设置一个上传文件存放的目录
	
	//如果存放目录不存在 则创建
	if(!file_exists($path)){
		mkdir($path, 0777, true);
	}

	//获取上传文件的后缀名
	$ext = pathinfo($file['name'], PATHINFO_EXTENSION); //jpg
	//随机一个文件名
	$rname = time().rand(1000,9999); //436456556
	//拼接一个新的文件名
	$newname = $rname.'.'.$ext;

	//./uploads/436456556.jpg
	$newpath = rtrim($path, '/').'/'.$newname;

	//5.符合要求  进行上传
	if(is_uploaded_file($file['tmp_name'])){
		if(move_uploaded_file($file['tmp_name'], $newpath)){
			return $newname;
		}else{
			echo '上传失败';
		}
	}else{
		exit('请通过HTTP POST方式进行上传');
	}
	
}
/*
*功能：验证码
*参数：
*@param int $width 验证码的宽度 默认为120
*@param int $height 验证码的高度 默认40
*@param int $len 验证码的长度 默认为4个
*@param int $type 验证码类型 默认1返回字母 2数字 3数字+字母
*return：返回随机的字符 
	string $str;
*/
function yzm($width = 120, $height = 40, $len = 4, $type = 2)
{
	//1.创建画布
	$res = imagecreatetruecolor($width, $height);

	//2.准备颜色 值越小颜色越深 值越大颜色越浅
	//背景颜色 
	$qian = imagecolorallocate($res,rand(150,255),rand(150,255),rand(140,200));
	//字体颜色
	$shen = imagecolorallocate($res,rand(0,120),rand(0,130),rand(20,140));

	//3.开始绘画
	//a.画填充矩形
	imagefilledrectangle($res,0,0,$width,$height,$qian);

	//b.画字符 imagettftext 坐标字符左下角
	//随机4个字符 array_rand  shuffle  implode
	switch($type){
		case 1:
			$str = implode('',array_rand(array_flip(range('a', 'z')), $len));
			break;
		case 2:
			$str = implode('',array_rand(array_flip(range(0, 9)), $len));
			break;
		case 3:
			$str = implode('',array_rand(array_flip(array_merge(range('a', 'z'),range(0,9))), $len));
			break;
	}
	
	for($i = 0;$i < $len;$i++){
		imagettftext($res, 16, 0, rand($i*($width/$len),(($i+1)*($width/$len))-8), rand(14,$height), $shen, './simsun.ttc', $str{$i});
	}

	//c.画干扰元素
	//画点
	for($i = 1;$i <= 200;$i++){
		imagesetpixel($res, rand(0,$width), rand(0,$height), $shen);
	}
	//画线
	for($i = 1;$i <= 5;$i++){
		imageline($res, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $shen);
	}

	//4.输出到浏览器中 MIME类型 png ---image/png html text/html
	header('content-type:image/png');
	imagepng($res);

	//5.销毁画布
	imagedestroy($res);
	return $str;
}


/**
 * 等比缩放函数（以保存的方式实现）
 * @param string $picname 被缩放的处理图片源
 * @param int $maxx 缩放后图片的最大宽度
 * @param int $maxy 缩放后图片的最大高度
 * @param string $pre 缩放后图片名的前缀名
 * @return String 返回后的图片名称(带路径)，如a.jpg=>s_a.jpg
 */
function suofang($picname,$maxx=100,$maxy=100,$pre="s_"){
	$info = getimageSize($picname); //获取图片的基本信息
	
	$w = $info[0];//获取宽度
	$h = $info[1];//获取高度
	
	//获取图片的类型并为此创建对应图片资源	
	switch($info[2]){
		case 1: //gif
			$im = imagecreatefromgif($picname);
			break;
		case 2: //jpg
			$im = imagecreatefromjpeg($picname);
			break;
		case 3: //png
			$im = imagecreatefrompng($picname);
			break;
		default:
			die("图片类型错误！");
	}
	
	//计算缩放比例
	if(($maxx/$w)>($maxy/$h)){
		$b = $maxy/$h;
	}else{
		$b = $maxx/$w;
	}
	
	//计算出缩放后的尺寸
	$nw = floor($w*$b);
	$nh = floor($h*$b);
	
	//创建一个新的图像源(目标图像)
	$nim = imagecreatetruecolor($nw,$nh);
		
	//执行等比缩放
	imagecopyresampled($nim,$im,0,0,0,0,$nw,$nh,$w,$h);
	
	//输出图像（根据源图像的类型，输出为对应的类型）
	$picinfo = pathinfo($picname);//解析源图像的名字和路径信息
	$newpicname= $picinfo["dirname"]."/".$pre.$picinfo["basename"];
	switch($info[2]){
		case 1:
			imagegif($nim,$newpicname);
			break;
		case 2:
			imagejpeg($nim,$newpicname);
			break;
		case 3:
			imagepng($nim,$newpicname);
			break;
	}
	//释放图片资源
	imagedestroy($im);
	imagedestroy($nim);
	//返回结果
	return $newpicname;
}



